#ifndef ERKANGSTRUCT_H
#define ERKANGSTRUCT_H


#include "os.h"
#include "ListOfFunctions.h"

#include <vector>
#include <string>


namespace ErkangShuttle
{
	struct InstanceStruct
	{
		ListOfInstanceFunctions* _pListOfInstanceFunctions;
		VkInstanceCreateInfo _VkInstanceCreateInfo;
		VkInstance _VkInstance;
		std::vector<VkExtensionProperties> _VkInstanceExtensions;
		std::vector<const char*> _VkInstanceExtensionNames;
	};
	struct PhysicalDeviceStruct
	{
		ListOfPhysicalDeviceFunctions* _pListOfPhysicalDeviceFunctions;
		VkPhysicalDevice _VkPhysicalDevice;
		std::vector<VkExtensionProperties> _VkPhysicalDeviceExtensions;
		std::vector<const char*> _VkPhysicalDeviceExtensionNames;
		VkPhysicalDeviceProperties _VkPhysicalDeviceProperties;
		VkPhysicalDeviceFeatures _VkPhysicalDeviceFeatures;
		std::vector<VkQueueFamilyProperties> _VkQueueFamilies;
	};
	struct QueueInfo
	{
		uint32_t _FamilyIndex;
		float _Priority{ -1.0f }; // 0.0f ~ 1.0f
	};
	struct DeviceStruct
	{
		PFN_vkGetDeviceProcAddr vkGetDeviceProcAddr;
		ListOfDeviceFunctions* _pListOfDeviceFunctions;
		VkDeviceCreateInfo _VkDeviceCreateInfo;
		std::vector<VkDeviceQueueCreateInfo> _VkDeviceQueueCreateInfos;
		std::vector<QueueInfo> _QueueInfos;
	};
}

#endif // ERKANGSTRUCT_H
